Clase práctica Semana 10

Author

Santiago Sotelo y Nadia Duffó

Introducción

¿Cómo funciona R?

“Todo lo que existe en R es un objeto, todo lo que sucede en R es una función.”

-John Chambers

R es un lenguaje de programación que tradicionalmente opera como funciones anidadas. Por ejemplo:

supermercado <- c("manzana", "pera", "uva")
gsub("a", "A", paste("mi", supermercado))
[1] "mi mAnzAnA" "mi perA"    "mi uvA"    

Se podría comparar con una matrioska o muñeca rusa en la medida en que una función encapsula a otra función y así sucesivamente ejecutándose de adentro hacia afuera.

La manera moderna de programar en R es utilizando el operador %>% o pipeta. El mismo ejemplo se vería así:

library(dplyr)
supermercado <- c("manzana", "pera", "uva")
supermercado %>% 
  paste("mi", .) %>% 
  gsub("a", "A", .)
[1] "mi mAnzAnA" "mi perA"    "mi uvA"    

La pipeta se puede importar desde el paquete {dplyr} y se puede comparar con una tubería que pasa el resultado hacia la siguiente función, es decir, primero llamamos al objeto supermercado y luego aplicamos la función paste, y luego aplicamos la función gsub. Esta manera de programar se lee de arriba a abajo. El atajo para escribir la pipeta es ctrl + shift + m

En la práctica utilizaremos una combinación de la manera tradicional y moderna al momento de programar en R.

Preparación

Para iniciar un proyecto de R nos dirigiremos a la pestaña

File < New Project < New Directory < New Project < Create Project

Luego creamos un nuevo archivo R markdown (.Rmd), nos dirigimos a la pestaña

File < New File < R Markdown < Ok

Para crear un bloque de código en R podemos hacer click en el ícono verde con la letra C en la barra superior o utilizar el atajo ctrl + alt + i

Ahora instalamos los paquetes necesarios para el ejercicio de hoy.

install.packages("pacman")
pacman::p_load(tidyverse, rio)

Importación de data

En esta clase, se importa la base de datos filmaffinity que contiene información sobre filmes publicados entre 1900 y 2020. Para mayor información revise el enlace.

filmaffinity <- rio::import("data/filmaffinity_dataset.xlsx")

Exploración de data

Una vez importada la base de datos a la sesión, es necesario explorarla para familiarizarnos con la información.

filmaffinity

La base de filmes cuenta con 119,003 observaciones y 9 variables.

filmaffinity %>% 
  count(`Tipo filme`)

La mayoría de observaciones corresponden al tipo filme con 73,651 observaciones.

glimpse(filmaffinity)
Rows: 119,003
Columns: 9
$ ...1         <dbl> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,…
$ Título       <chr> "'49-'17", "10,000 Years B.C. (C)", "1812", "20.000 legua…
$ Año          <dbl> 1917, 1916, 1912, 1907, 1909, 1916, 1912, 1916, 1908, 191…
$ País         <chr> "Estados Unidos", "Estados Unidos", "Rusia", "Francia", "…
$ Dirección    <chr> "Ruth Ann Baldwin", "Willis H. O'Brien", "Vasili Goncharo…
$ Reparto      <chr> "Joseph W. Girard, Leo Pierson, William Dyer, Mattie Witt…
$ Nota         <chr> "--", "5,1", "--", "6,0", "5,3", "--", "5,4", "--", "4,6"…
$ `Tipo filme` <chr> "Película", "Cortometraje", "Película", "Cortometraje", "…
$ Género       <chr> "Western", "Comedia", "Drama", "Fantástico", "Comedia", "…

En la base de datos se tienen las variables ...1, Título, Año, País, Dirección, Reparto, Nota, Tipo filme, Género.

Limpieza de data

La primera columna que corresponde al index del filme en la tabla no tiene un nombre inteligible, por lo que procedemos a renombrar esta columna.

filmaffinity2 <- 
  filmaffinity %>% 
  rename(index = 1)

filmaffinity2
1
Renombrar la variable de la posición 1.

La variable Nota actualmente figura como character en vez de numeric dado que el punto decimal está representado como una , y los valores perdidos como --. Ajustemos esta variable para poder utilizarla como variable numérica.

filmaffinity3 <- 
  filmaffinity2 %>% 
  mutate(
    Nota = gsub(",", ".", Nota),
    Nota = gsub("--", NA, Nota),
    Nota = as.numeric(Nota),
  )
filmaffinity3
1
Reemplazar el símbolo , por . en la columna Nota.
2
Reemplazar el símbolo -- por el valor perdido NA en la columna Nota.
3
Convertir la columna Nota a variable numérica.

Luego de aplicar este proceso podemos realizar operaciones aritméticas con la variable Nota:

tab1 <- 
  filmaffinity3 %>% 
  group_by(`Tipo filme`) %>% 
  summarise(Nota_promedio = mean(Nota, na.rm =T))
tab1

El promedio de los filmes, considerando los puntuados, para el caso de miniserie es de 6.1.

Exportación de data

Finalmente, para exportar la tabla sobre la nota promedio de los filmes a excel se puede utilizar la siguiente función del paquete {rio}:

tab1 %>% 
  rio::export("data/tab1.xlsx")

Ejercicio final

Responda las siguientes preguntas:

  1. Cuál es la película más antigua de Estados Unidos, Perú, Chile, España
  2. Cuál es el puntaje promedio por tipo de estos países.